package cz.pecinovsky.česky.oopnz._101_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

import cz.pecinovsky.česky.oopnz.utility.Barva;
import cz.pecinovsky.česky.oopnz.utility.IO;

/////%I+ <114
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Plátno;
/////%I-

////%I+ <110
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Trojúhelník;
/////%I-

/////%I+ >110 -014
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Přesouvač;
//
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Trojúhelník;
/////%I-

import cz.pecinovsky.česky.oopnz.správce.Elipsa;
import cz.pecinovsky.česky.oopnz.správce.Obdélník;
import cz.pecinovsky.česky.oopnz.správce.Trojúhelník;

import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;


////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */
public class Robot_107_114
{    private Robot_107_114() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Testovací třída {@code Obličej} slouží ke komplexnímu otestování
 * třídy ...
 * rodiny tříd ...
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Robot extends junit.framework.TestCase
{
    private Obdélník hlava;
    private Obdélník leváRuka;
    private Obdélník praváRuka;
    private Obdélník tělo;
    private Obdélník nohy;
//%A+ >109
    private Elipsa levéKolo;
    private Elipsa pravéKolo;
//%A-


//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public Robot(String název)
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Vytvoření přípravku (fixture), tj. sady objektů, s nimiž budou všechny
     * testy pracovat a která se proto vytvoří před spuštěním každého testu.
     */
    @Override
    protected void setUp()
    {
//%I+ <109
//        hlava     = new Obdélník(100,  50,  50,  50);
//        tělo      = new Obdélník( 75, 100, 100, 125);
//        leváRuka  = new Obdélník( 50, 100,  25, 100);
//        praváRuka = new Obdélník(175, 100,  25, 100);
//        nohy      = new Obdélník(100, 225,  50,  75);
//%I-
//%A+ >109
        hlava     = new Obdélník(100,  50,  50,  50, Barva.ČERVENÁ);
        tělo      = new Obdélník( 75, 100, 100, 125, Barva.AZUROVÁ);
        leváRuka  = new Obdélník( 50, 100,  25, 100, Barva.OCELOVÁ);
        praváRuka = new Obdélník(175, 100,  25, 100, Barva.OCELOVÁ);
        levéKolo  = new Elipsa  ( 75, 225,  50,  50, Barva.ČERNÁ);
        pravéKolo = new Elipsa  (125, 225,  50,  50, Barva.ČERNÁ);
//%A-
//%A+ >114
        hlava     .nakresli();
        tělo      .nakresli();
        leváRuka  .nakresli();
        praváRuka .nakresli();
        levéKolo  .nakresli();
        pravéKolo .nakresli();
//%A-
        IO.zpráva("Robot připraven");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }

    /***************************************************************************
     * Zamává robotovou pravou rukou (pravou z hlediska pozovovatele).
     */
    public void testMávnout()
    {
        praváRuka.posunDolů(-75);
        IO.čekej(500);
        praváRuka.posunDolů(+75);
    }

//%A+ >108

    public void testObarvi()
    {
        Barva ocelová = Barva.getBarva("ocelová");
        praváRuka.setBarva(ocelová);
        leváRuka .setBarva(ocelová);
        Barva azur = Barva.getBarva("azurová");
        tělo.setBarva(azur);
    }

//%A-
//%A+ >=110z

    public void testPlynuleMávnout()
    {
        Přesouvač přes = new Přesouvač(15);
        přes.přesunO(0, -75, praváRuka);
        přes.přesunO(0,  75, praváRuka);
    }

//%A-
}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
////////////////////////////////////////////////////////////////////////////////
//== TESTY A METODA MAIN =======================================================
//Není-li třída testovací, následující dvě metody se smažou
//%X+   Metoda připravená k vložení do testovacích tříd
     /** */
     public void testPřípravek() {}
//%X-


    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
//            Plátno.smažPlátno();
            SprávcePlátna.getInstance().odstraňVše();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Run.tests(Robot.class,
                new TearDown(),
//                "testPřípravek",
//                "testMávnout",
//                "testObarvi",
                "testPlynuleMávnout",
                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
